package cn.xwt.weidisk.service;

import cn.xwt.weidisk.constant.ServiceError;
import cn.xwt.weidisk.pojo.dao.LoginLogDo;
import cn.xwt.weidisk.pojo.dao.UserDo;
import cn.xwt.weidisk.pojo.dto.*;
import org.springframework.security.core.userdetails.UserDetailsService;

import java.util.List;

/**
 * @author 薛慰涛
 */
public interface UserService extends UserDetailsService {

    /**
     * 注册用户
     * @param regData username password email
     * @return ServiceError
     */
    ServiceError registerUser(RegData regData);

    /**
     * 判断用户名是否存在
     * @param username 用户名
     * @return boolean true存在 false不存在
     */
    boolean existsUsername(String username);

    /**
     * 判断邮箱是否存在
     * @param email 邮箱地址
     * @return boolean true存在 false不存在
     */
    boolean existsEmail(String email);

    /**
     * 根据id查询用户信息
     * @param id 用户id
     * @return userData
     */
    UserData selectUser(Long id);

    /**
     * 保存头像
     * @param avatar 头像
     * @param id 用户id
     * @return boolean
     */
    boolean saveAvatar(String avatar, Long id);

    /**
     * 获取头像链接
     * @param id 用户id
     * @return string
     */
    String getAvatarLink(Long id);

    /**
     * 修改用户名
     * @param usernameData id，username，email，code
     * @return boolean
     */
    ServiceError updateUsername(UsernameData usernameData);

    /**
     * 修改密码
     * @param passwordData id，password，email，code
     * @return boolean
     */
    Boolean updatePassword(PasswordData passwordData);

    /**
     * 修改邮箱
     * @param emailData id，email，code，password
     * @return String
     */
    ServiceError updateEmail(EmailData emailData);

    /**
     * 获取用户容量
     * @param id 用户id
     * @return integer
     */
    Integer getCapacity(Long id);

    /**
     * 获取用户列表
     * @return  List<UserDo>
     */
    List<UserDo> getUserList();

    /**
     * 修改locked
     * @param id 用户id
     * @param locked locked
     */
    void updateLocked(Long id, Byte locked);

    /**
     * 修改用户容量
     * @param id 用户id
     * @param capacity 容量
     */
    void updateCapacity(Long id, Integer capacity);

    /**
     * 保存登录信息
     * @param uid 用户id
     * @param type 设备类型
     * @param ip ip地址
     */
    void saveLoginLog(Long uid, String type, String ip);

    /**
     * 通过用户id查询登录信息
     * @param uid 用户id
     * @return List<LoginLogDo>
     */
    List<LoginLogDo> selectLoginLogList(Long uid);
}
